// eslint-disable-next-line vue/no-duplicate-attributes
// eslint-disable-next-line vue/no-duplicate-attributes

// import store from '@/store'
import router from '@/router'
import store from '@/store'
import axios from 'axios'
import { Message } from 'element-ui'
import baseData from '@/baseData'
// import { Message } from 'element-ui'
// import router from '@/router'
// 暂时没有
let latestLogoutTime = 0;
const service = axios.create({
  // baseURL: process.env.VUE_APP_BASE_URL, // 基础地址
  // baseURL: "https://bsatrader.com/admin", // 基础地址
  // baseURL: "http://192.168.1.94:8080/admin",
   baseURL: baseData.basePathAdmin,
  // 配置请求头
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  },
  timeout: 500000
}) // 创建一个新的axios实例
// 成功1 失败2
// 添加请求拦截器
service.interceptors.request.use(function (config) {

  // if (config.method === 'get') {
  //   let obj = removeEmptyProperties({ ...config.params })
  //   config.params = obj
  // }
  // if (localStorage.getItem("token")) {
  //   config.headers.authentication = localStorage.getItem("token")
  // }

  // 在发送请求之前做些什么
  if (store.getters.token) {
    config.headers.authentication = `${store.getters.token}`
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
service.interceptors.response.use(function (response) {
  const { data, msg, code } = response.data // 默认json格式
  // console.log(data,'data');
  if (code === 200) {
    return data
  } else {
    Message({ type: 'error', message: msg })
    return Promise.reject(new Error(msg))
  }
}, function (error) {
  switch (error.response.status) {
    case 500:
      // 当 expression 的值等于 value1 时执行的代码
      Message({ type: 'error', message: error.message })
      break
    case 401:
      // 1秒之内只弹出一次 登录过期提醒
      const timeNow = new Date().getTime();
      if(latestLogoutTime == 0 || timeNow-latestLogoutTime > 1000){
        Message({ type: 'error', message: '登录过期，请重新登录' })
        latestLogoutTime = timeNow
      }
      
      // 清除token
      store.dispatch('user/logout') // 调用action 退出登录
      // 跳转到登录页面
      router.push('/login')
      // alert("这个接口返回401，退出到登录页")
      break
    // 可以有多个 case 分支
    default:
      Message({ type: 'error', message: error })
    // 当 expression 的值不匹配任何 case 时执行的代码
  }
  // Message({ type: 'error', message: error })
  // // 对响应错误做点什么
  return Promise.reject(error)
})

function removeEmptyProperties(obj) {
  const result = {};

  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      // 检查值是否为空
      if (obj[key] !== null &&
        obj[key] !== undefined &&
        obj[key] !== ""
        && !Array.isArray(obj[key])
        && !isNaN(obj[key])
        // 这个东西 影响的
      ) {
        result[key] = obj[key];
      }
    }
  }

  return result;
}

export default service

